package cn.com.dycc.sys_manage.deptsysmanagement.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import cn.com.dycc.sys_manage.deptsysmanagement.entity.Dept;
import cn.com.dycc.sys_manage.deptsysmanagement.entity.DeptResult;



/**
 * 单位/部门管理持久层接口
 * Description: 
 * Author: linfangan
 * Version: 1.0
 * Create Date Time: 2017年8月15日 上午10:37:37.
 * Update Date Time: 
 * @see
 */
@Repository("deptDao")
public interface DeptDao {
	
	/**
	 * 增加单位/部门信息
	 * @param dept 单位信息
	 * @return 成功返回1
	 */
	public int addDept(Dept dept);
	
	/**
	 * 查询所有的单位/部门名称
	 * @return 所有的单位名称
	 */
	public List<String> findAllDeptName();
	
	/**
	 * 查询所有单位/部门信息
	 * @return 单位/部门信息集合
	 */
	public List<Dept> findAllDept(@Param("org_id")String org_id);
	
	/**
	 * 更新单位/部门信息
	 * @param dept 更新信息
	 * @return 成功返回1
	 */
	public int updateDept(Dept dept);
	
	/**
	 * 根据id查找单位/部门信息
	 * @param deptNo 单位/部门id
	 * @return 
	 */
	public Dept findDeptByDeptNo(
			@Param("dept_no")String dept_no,
			@Param("org_id")String org_id);
	
	/**
	 * 根据id查找单位/部门信息
	 * @param deptNo 单位/部门id
	 * @return 
	 */
	public DeptResult findAllInfoByDeptNo(			
			@Param("dept_no")String dept_no,
			@Param("org_id")String org_id);
	
	/**
	 * 根据id删除单位/部门信息
	 * @param deptNo 单位/部门id
	 * @return
	 */
	public int deleteDeptByDeptNo(			
			@Param("dept_no")String dept_no,
			@Param("org_id")String org_id);
	
//	/**
//	 * 根据部门id数组,删除部门单位信息
//	 * @param ids
//	 * @return
//	 */
//	public int deleteDeptsByIds(String... ids);
	
//	/**
//	 * 批量插入单位/部门信息
//	 * @return
//	 */
//	public int insertBatchDept(List<Dept> listDept);
	
	/**
	 * 根据部门/单位名称查询id
	 * @param dept_name
	 * @return
	 */
	public int findDeptNoByDeptName(
			@Param("dept_name")String dept_name,
			@Param("org_id")String org_id);
	
	
//	/**
//	 * 查询pid为0的单位/部门信息id
//	 * 
//	 * @return
//	 */
//	public List<Integer> findDeptByPid();
	
	/**
	 * 查询单位的Pid的单位/部门id
	 * @param deptNo
	 * @return
	 */
	public List<String> findDeptBylowPid(String dept_no);
	
	/**
	 * 通过pid查询所有的dept信息(树状)
	 * @param pId
	 * @return
	 */
	public List<Dept> findDeptByparentId(
			@Param("id")String id,
			@Param("org_id")String org_id);
	
//	/**
//	 * 查询id最大值
//	 * @return
//	 */
//	public int findMaxId();
//	
//	/**
//	 * 调用存储过程获取id
//	 * @return
//	 */
//	public int getDeptNo();
	
	/**
	 * 查询所有单位/部门信息，排序 管理员展示
	 * @return
	 */
	public List<Dept> findAllDeptByShowChildLst(
			@Param("id")String id,
			@Param("org_id")String org_id
			);
	
	/**
	 * 查询pid为0的的单位id，分组织 ，用于管理员显示
	 * @param org_id 组织标识
	 * @param dept_flag 0 业主  1监理
	 * @return
	 */
	public String selDeptNoByPidOfAll(
			@Param("org_id")String org_id
			);
	/**
	 * 查询pid为0的的单位id，分组织 ，用于普通用户显示
	 * @param org_id 组织标识
	 * @param dept_flag 0 业主  1监理
	 * @return
	 */
	public List<String> selDeptNoByPidOfPart(
			@Param("org_id")String org_id
			);
	
	/**
	 * 查询所有单位/部门信息，排序 普通用户展示
	 * @return
	 */
	public List<Dept> callShowDeptOfStateChildLst(			
			@Param("id")String id,
			@Param("org_id")String org_id);
	
	/**
	 * 根据查询user_child表的dept_no查询top_dept_no，再查询部门pid
	 * @param dept_no userChild表部门id
	 * @return
	 */
	public List<String> throwUserChildAccountFindPid(			
			@Param("dept_no")String dept_no,
			@Param("org_id")String org_id);
	
	/**
	 * 用来判断同级部门名称是否已经存在
	 * @param org_id
	 * @param dept_flag
	 * @param pid
	 * @param dept_name
	 * @return
	 */
	public int dicideName(
			@Param("org_id")String org_id,
			@Param("pid")String pid,
			@Param("dept_name")String dept_name
			);
	
	
	/**
	 * 根据部门id查询部门上级部门id
	 * @return
	 */
	public String findPidBydeptNo(			
			@Param("dept_no")String dept_no,
			@Param("org_id")String org_id);
	
//	/**
//	 * 
//	 * @return
//	 */
//	public List<Dept> ceshi_px();
	
	/**
	 * 20180503新建查询部门树
	 * @param org_id
	 * @return
	 */
	public List<Dept> findAllDeptNew(
			@Param("org_id")String org_id,
			@Param("state")String state);
	
}
